﻿using System;
using System.Collections.Generic;
using System.Text;

namespace WeatherBuiltIn
{
    //IObserver<T> 接口，提供用于接收基于推送的通知的机制。
    class StatisticsDisplay : IObserver<MeasurementData>
    {
        private IDisposable _unsubscriber;
        public virtual void Subscribe(IObservable<MeasurementData> provider)
        {
            if (provider != null)
                _unsubscriber = provider.Subscribe(this);
        }

        public void OnCompleted()
        {
            Console.WriteLine("Statistics 任务完成");
            Unsubscribe();
        }


        public virtual void Unsubscribe()
        {
            Console.WriteLine("Statistics 取消订阅");
            //Dispose执行与释放或重置非托管资源关联的应用程序定义的任务。
            //取消订阅
            _unsubscriber.Dispose();
        }
        //Exception表示在应用程序执行过程中发生的错误。简称错误类
        public void OnError(Exception error)
        {
            //获取或设置控制台的前景色。
            var original = Console.ForegroundColor;
            //控制台改为红色
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine("Statistics数据获取错误!");
            //还原控制台颜色
            Console.ForegroundColor = original;
        }
        //输出类
        public void OnNext(MeasurementData value)
        {
            Console.WriteLine($"Statistics: {value.Temperature}, {value.Humidity}, {value.Pressure}.");
        }
    }
}
